﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Interfaces;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace Model
{
    [Serializable]
    public class TurneringsCollection
    {
        #region Attributes
        private List<Turnering> listeTurneringer;
        #endregion

        #region Konstruktør
        public TurneringsCollection()
        {
            listeTurneringer = new List<Turnering>();
        }
        #endregion

        #region Turnering
        public Turnering TilføjTurnering(string turneringsnavn, string gruppenavn, DateTime startdato, int antalRunder, int turneringsID)
        {
            Turnering turnering = new Turnering(turneringsnavn, gruppenavn, startdato, antalRunder, turneringsID);
            listeTurneringer.Add(turnering);
            return turnering;
        }

        public void RedigerTurnering(Turnering aktuelTurnering, string turneringsnavn, string gruppenavn, DateTime startdato, int antalRunder)
        {
            aktuelTurnering.Turneringsnavn = turneringsnavn;
            aktuelTurnering.Gruppenavn = gruppenavn;
            aktuelTurnering.Startdato = startdato;
            aktuelTurnering.AntalRunder = antalRunder;
        }

        public void SletTurnering(Turnering aktuelTurnering)
        {
            listeTurneringer.Remove(aktuelTurnering);
        }

        public Turnering FindTurnering(int turneringsID)
        {
            foreach (Turnering nuværendeTurnering in listeTurneringer)
            {
                if (nuværendeTurnering.TurneringsID == turneringsID)
                {
                    return nuværendeTurnering;
                }
            }
            return null;
        }

        public IEnumerator HentTurneringer()
        {
            return listeTurneringer.GetEnumerator();
        }
        #endregion

        #region Deltager
        // Går vider ned i lagene for at oprette deltager
        public Deltager TilføjDeltager(Turnering aktuelTurnering, string fornavn, string efternavn, string klub, int nr, int deltagerID, int rating, double korrektion)
        {
            return aktuelTurnering.TilføjDeltager(fornavn, efternavn, klub, nr, deltagerID, rating, korrektion);
        }

        // Går videre ned i lagene for at finde deltager
        public Deltager FindDeltager(Turnering aktuelTurnering, int deltagerID)
        {
            return aktuelTurnering.FindDeltager(deltagerID);
        }

        // Går vider ned i lagene for at slette deltager
        public void FjernDeltager(Turnering aktuelTurnering, int deltagerID)
        {
            aktuelTurnering.FjernDeltager(deltagerID);
        }

        // Går vider ned i lagene for at flytte deltager
        public void FlytDeltager(Turnering aktuelTurnering, int deltagerID, int nyPlacering)
        {
            aktuelTurnering.FlytDeltager(deltagerID, nyPlacering);
        }
        #endregion

        #region Properties
        public List<Turnering> ListeTurneringer
        {
            get { return listeTurneringer; }
        }
        #endregion
    }
}
